package xin.marcher.wind.migrate.mapper;

import org.springframework.stereotype.Repository;
import xin.marcher.wind.migrate.domain.RangeScroll;
import xin.marcher.wind.migrate.domain.entity.EtlDirtyRecordDO;
import xin.marcher.wind.migrate.domain.entity.EtlProgressConfigDO;
import xin.marcher.wind.migrate.domain.entity.EtlProgressDO;
import xin.marcher.wind.migrate.domain.entity.EtlStatisticalDO;

import java.math.BigDecimal;
import java.util.List;

/**
 * 数据同步的基础mapper
 */
@Repository
public interface MigrateScrollMapper {

    /**
     * 初始化写入一条同步迁移记录
     *
     * @param etlProgressDO
     * @return
     */
    int insertEtlProgress(EtlProgressDO etlProgressDO);

    /**
     * 更新迁移记录的数据
     *
     * @param etlProgressDO
     * @return
     */
    int updateEtlProgress(EtlProgressDO etlProgressDO);

    /**
     * 查询迁移的进度列表
     *
     * @param etlProgressDO
     * @return
     */
    List<EtlProgressDO> queryEtlProgressList(EtlProgressDO etlProgressDO);

    /**
     * 查询未同步完成的表，数据量总和
     *
     * @return
     */
    List<EtlProgressDO> queryMiddleProgressList();

    /**
     * 查询迁移的进度详情
     *
     * @param id
     * @return
     */
    EtlProgressDO queryEtlProgressById(Long id);

    /**
     * 查询核对校验的详情
     *
     * @param rangeScroll
     * @return
     */
    EtlProgressDO queryEtlProgressCheck(RangeScroll rangeScroll);

    /**
     * 查询全部的配置信息
     *
     * @return
     */
    List<EtlProgressConfigDO> queryEtlProgressConfigList();

    /**
     * 查询迁移明细
     *
     * @param etlDirtyRecordDO
     * @return
     */
    List<EtlDirtyRecordDO> queryDirtyRecordList(EtlDirtyRecordDO etlDirtyRecordDO);

    /**
     * 新增一条迁移进度明细记录
     *
     * @param etlDirtyRecordDO
     * @return
     */
    int insertEtlDirtyRecord(EtlDirtyRecordDO etlDirtyRecordDO);

    /**
     * 更新迁移进度明细记录
     *
     * @param etlDirtyRecordDO
     * @return
     */
    int updateEtlDirtyRecord(EtlDirtyRecordDO etlDirtyRecordDO);

    /**
     * 新增某表的一日数据统计
     *
     * @param etlStatisticalDO
     * @return
     */
    int insertEtlStatistical(EtlStatisticalDO etlStatisticalDO);

    /**
     * 更新某表的一日数据统计
     *
     * @param etlStatisticalDO
     * @return
     */
    int updateEtlStatistical(EtlStatisticalDO etlStatisticalDO);

    /**
     * 查询单个表，单个日期的记录
     *
     * @param etlStatisticalDO
     * @return
     */
    EtlStatisticalDO getEtlStatistical(EtlStatisticalDO etlStatisticalDO);

    /**
     * 查询单个表最大的日期统计记录
     *
     * @param etlStatisticalDO
     * @return
     */
    EtlStatisticalDO getMaxDateEtlStatistical(EtlStatisticalDO etlStatisticalDO);

    /**
     * 查询统计的记录
     *
     * @param etlStatisticalDO
     * @return
     */
    List<EtlStatisticalDO> queryEtlStatisticalList(EtlStatisticalDO etlStatisticalDO);

    /**
     * 获取数据迁移的数据大概数量
     *
     * @param etlStatisticalDO
     * @return
     */
    BigDecimal getStatisticalCount(EtlStatisticalDO etlStatisticalDO);

    /**
     * 取得支持全量同步的表
     *
     * @return 支持全量同步的表
     */
    List<String> getScrollAbleTables();

}
